﻿using System;
using System.Collections;
using System.Linq;
using System.Text;
using GestionadorBaseDatos;

namespace CRUD.InterfaceDAO
{
    /// <summary>
    /// Interface que define el comportamiento de la clase Pago
    /// </summary>
    public interface IDaoPago: IGenericDAO<Pago,int>
    {
        /// <summary>
        /// Obtiene todos los pagos
        /// </summary>
        /// <returns>Retorna una lista de objetos</returns>
        IList GetAll();
        
        /// <summary>
        /// Inserta un pago
        /// </summary>
        /// <param name="crear">Objeto de tipo Pago</param>
        void Insert(Pago crear);
        
        /// <summary>
        /// Actualiza los datos de un pago
        /// </summary>
        /// <param name="pago">Objeto de tipo Pago</param>
        void Update(Pago pago);
        
        /// <summary>
        /// Obtiene los pagos de un usuario en especifico
        /// </summary>
        /// <param name="usuario">Objeto de tipo Usuario</param>
        /// <returns>Retorna una lista de objetos</returns>
        IList GetPagosByUsuario(Usuario usuario);
        
        /// <summary>
        /// Obtiene los pagos dado una forma de pago en especifico
        /// </summary>
        /// <param name="formaPago">Objeto de tipo FormaPago</param>
        /// <returns>Retorna una lista de objetos</returns>
        IList GetPagosByFormaPago(FormaPago formaPago);

        /// <summary>
        /// Obtiene los pagos dados el nickname de un usuario y el id de una forma de pago
        /// </summary>
        /// <param name="formaPago">Objeto de tipo Pago</param>
        /// <returns>Retorna un objeto de tipo Pago</returns>
        Pago GetPagosByUserAndId(Pago formaPago);     

    }
}
